package com.vecspace.data.numerical;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;

import com.vecspace.utils.NumberUtil;

public abstract class HMoney extends HNumerical{
	private static final long serialVersionUID = -7816765501698241734L;
	
//	private static int digits = 4;//单位为元时的小数位数，在表示平均单价时，小数位要多留几位，否则合计值不准确
	protected int formatDigits = 2;//格式化后显示的小数位
	
	/**格式化后显示的小数位
	 * 
	 * @return 
	 * @author: wanghua
	 */
	public int getFormatDigits() {
		return formatDigits;
	}

	/**格式化后显示的小数位
	 * 
	 * @param formatDigits 
	 * @author: wanghua
	 */
	public void setFormatDigits(int formatDigits) {
		this.formatDigits = formatDigits;
	}

	/**格式化金额（元）
	 * 
	 * @param value
	 * @param separatorDigit 将格式化为字符串时，使用千分位分隔符还是万分位分隔符
	 * @param formatDigits 格式化后显示的小数位
	 * @return 
	 * @author: wanghua
	 */
	public static String formatYuan(BigDecimal value, EnumNumericalSeparatorDigit separatorDigit, int formatDigits) {
		if(value == null)return "";
		BigDecimal yuan = value;
		String pattern;
		if(EnumNumericalSeparatorDigit.QianWeiSplit == separatorDigit) {
			pattern = ",###,##0";
		}else if(EnumNumericalSeparatorDigit.WanWeiSplit == separatorDigit) {
			pattern = ",####,###0";
		}else {
			pattern = "#0";
		}
		
		if(formatDigits>0) {//有小数位，添加小数点
			pattern = pattern + ".";
		}
		for(int i=0; i<formatDigits; ++i) {//设置保留的小数位数占位符
			pattern = pattern + "#";
		}
		
		DecimalFormat df = new DecimalFormat(pattern);
		df.setRoundingMode(RoundingMode.HALF_UP);
		   
        String fmtValueStr = df.format(yuan);
        return fmtValueStr;
	}
	
	/**格式化金额（将元转为万元）
	 * 
	 * @param value
	 * @param separatorDigit
	 * @return 
	 * @author: wanghua
	 */
	public static String formatWanYuan(BigDecimal value, EnumNumericalSeparatorDigit separatorDigit, int formatDigits) {
		if(value == null)return "";
		BigDecimal wanyuan = NumberUtil.divide(value, BigDecimal.valueOf(10000.0), 6);		
		
		String pattern;
		if(EnumNumericalSeparatorDigit.QianWeiSplit == separatorDigit) {
			pattern = ",###,##0";
		}else if(EnumNumericalSeparatorDigit.WanWeiSplit == separatorDigit) {
			pattern = ",####,###0";
		}else {
			pattern = "#0";
		}
		
		if(formatDigits>0) {//有小数位，添加小数点
			pattern = pattern + ".";
		}
		for(int i=0; i<formatDigits; ++i) {//设置保留的小数位数占位符
			pattern = pattern + "#";
		}
		
		DecimalFormat df = new DecimalFormat(pattern);
		df.setRoundingMode(RoundingMode.HALF_UP);
		
        String fmtValueStr = df.format(wanyuan);
        return fmtValueStr;
	}

//	/**单位为元时的小数位数，在表示平均单价时，小数位要多留几位，否则合计值不准确*/
//	protected static int getDigits() {
//		return digits;
//	}
//	/**单位为元时的小数位数，在表示平均单价时，小数位要多留几位，否则合计值不准确*/
//	protected static void setDigits(int digits) {
//		QMoney.digits = digits;
//	}

}
